package org.feng.client.request;

import lombok.Getter;
import org.feng.util.Base64Util;

import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map;

/**
 * 图像识别请求体
 *
 * @author feng
 */
@Getter
public abstract class ImageClassifyRequest implements BaiduRequest {

    private static final long serialVersionUID = -3312110463944726439L;

    /**
     * 图像数据，base64编码，要求base64编码后大小不超过4M，最短边至少15px，最长边最大4096px,支持jpg/png/bmp格式。<br>
     * 注意：图片需要base64编码、去掉编码头后再进行urlencode。
     */
    private String image;

    /**
     * 用于控制返回结果是否带有百科信息，若不输入此参数，则默认不返回百科结果；若输入此参数，会根据输入的整数返回相应个数的百科信息
     */
    private Integer baiKeNum;

    public void setImage(Path filePath) {
        // 本地文件路径
        byte[] imgData = new byte[0];
        try {
            imgData = Files.readAllBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            this.setImage(URLEncoder.encode(imgStr, "UTF-8"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public String getPathPrefix() {
        return "/image-classify";
    }

    public void setImage(String image) {
        this.image = image;
    }

    public void setBaiKeNum(Integer baiKeNum) {
        this.baiKeNum = baiKeNum;
    }


    public void fillParmaMap(Map<String, Object> paramsMap) {
        if(baiKeNum != null) {
            paramsMap.put("baike_num", baiKeNum);
        }
    }
}
